#pragma once

#include "syralink.hpp"
#include <vector>
#include <stdint.h>

namespace sl {

    std::vector<byte> str2bin(const std::string& str);

uint32_t          calculate_crc(const std::vector<byte>& data);
std::vector<byte> calculate_hash(const std::vector<byte>& data);
bool              ecc_generate(std::vector<byte>& prv, std::vector<byte>& puc);
std::vector<byte> read_private(const std::string& path);
std::vector<byte> read_public(const std::string& path);
std::vector<byte> calculate_puc(const std::vector<byte>& prv);
std::vector<byte> ecc_sign(
    const std::vector<byte>& data, const std::vector<byte>& prv);
bool ecc_verify(const std::vector<byte>& data, const std::vector<byte>& sign,
    const std::vector<byte>& puc);

std::vector<byte> ecc_encrypt(
    const std::vector<byte>& data, const std::vector<byte>& puc);
std::vector<byte> ecc_decrypt(
    const std::vector<byte>& data, const std::vector<byte>& prv);

std::vector<byte> sym_encrypt(
    const std::vector<byte>& data, const std::vector<byte>& key);
std::vector<byte> sym_decrypt(
    const std::vector<byte>& data, const std::vector<byte>& key);
} // namespace sl